#ifndef SERVER_H
#define SERVER_H

#include <QWidget>
#include<QTcpServer>
#include<QTcpSocket>
namespace Ui {
class Server;
}
//要定制协议---即根据客户端发来的不同请求做出不同响应
//服务端协议
//infotype:addpeople;addingpeople:name;addedpeople:name;;   ---定义添加联系人格式
//infotype:initwidget;name:...;image:...;;
//infotype:sendmes;sender:name;receiver:name;date:time;contend-type:...;contend:...;;    ---定义发送消息格式
class Server : public QWidget
{
    Q_OBJECT

public:
    explicit Server(QWidget *parent = nullptr);
    ~Server();
    void init();//初始化服务器工作
public:
    enum InfoType{INITWIDGET,ADDPEOPLE,SENDMES};
    QTcpServer* ts;
    QHash<QString,QTcpSocket*> widgets;   //所有被管理的客户端--每个QTcpSocket对应一个客户端
    QHash<QString,QString> widgets_image;   //客户端的图标
public:   //大体的接口
    void AddNewPeople(const QString& info);   //添加新用户的操作
    void SendMes(const QString& info);
    void InitWidget(const QString& info,QTcpSocket* tso);

public:  //具体细节的接口
    InfoType ConfirmInfoType(const QString& str,QString* mes);  //确定信息处理所用的协议并且更具不同的协议将消息定制成不同格式处理
    void GainAddPeopleMes(QString info,QString*sender,QString*receiver);//当信息格式为Addpeople时获取消息相关信息
    void GainSendMes(QString info,QString*sender,QString*receiver,QString* mes_time,QString* contend_type,QVariant*contend); //当信息格式为SendMes时获取消息相关数据
    void SetSendMesForm(QString* mes,const QString& sender_name,const QString& time,const QString& sender_image,const QString& contend_type,const QVariant& contend);
    void SetAddPeopleMesForm(QString* mes,QString name,QString image=""); //如果image为空则判断出此人不存在
private slots:

private:
    Ui::Server *ui;
};
#endif // SERVER_H
